unit movCheque;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Provider, SqlExpr, DB, DBClient, DBLocal, DBLocalS, StdCtrls,
  Mask, DBCtrls, Grids, DBGrids, RXDBCtrl, ExtCtrls, Buttons, ToolEdit;

type
  TfrmMovCheque = class(TForm)
    cdsMovCartera: TSQLClientDataSet;
    cdsMovCarteraID_MOVIMIENTO: TIntegerField;
    cdsMovCarteraFECHA: TSQLTimeStampField;
    cdsMovCarteraTIPO_MOVIMIENTO: TSmallintField;
    cdsMovCarteraID_CHEQUE: TIntegerField;
    cdsMovCarteraID_ORIGEN_DESTINO: TIntegerField;
    cdsMovCarteraTASA: TFloatField;
    sMovCartera: TDataSource;
    Label1: TLabel;
    Label2: TLabel;
    edbTasa: TDBEdit;
    cdsDestinoOrigen: TSQLClientDataSet;
    rbInversor: TRadioButton;
    rbOperario: TRadioButton;
    rbProveedor: TRadioButton;
    cdsDestinoOrigenNOMBRE: TStringField;
    cdsDestinoOrigenID: TStringField;
    Label4: TLabel;
    sDestinoOrigen: TDataSource;
    grdDestOrig: TRxDBGrid;
    Label3: TLabel;
    Shape1: TShape;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    lblNumero: TLabel;
    lblImporte: TLabel;
    lblBanco: TLabel;
    lblFechaEmision: TLabel;
    lblFechaCobro: TLabel;
    btnGrabar: TSpeedButton;
    edtFiltro: TEdit;
    Label10: TLabel;
    edbFecha: TDBDateEdit;
    DBNavigator1: TDBNavigator;
    rbBanco: TRadioButton;
    SpeedButton1: TSpeedButton;
    procedure cdsMovCarteraNewRecord(DataSet: TDataSet);
    procedure rbInversorClick(Sender: TObject);
    procedure rbOperarioClick(Sender: TObject);
    procedure rbProveedorClick(Sender: TObject);
    procedure grdDestOrigCellClick(Column: TColumn);
    procedure edtFiltroChange(Sender: TObject);
    procedure btnGrabarClick(Sender: TObject);
    procedure cdsMovCarteraTIPO_MOVIMIENTOChange(Sender: TField);
    procedure sMovCarteraStateChange(Sender: TObject);
    procedure rbBancoClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
  private
    Fusuario: word;
    Ftipo: word;
    FidCheque: integer;
    FidMovimiento: integer;
    procedure Setusuario(const Value: word);
    procedure Settipo(const Value: word);
    procedure SetidCheque(const Value: integer);
    procedure cargarDatosCheque;
    procedure SetidMovimiento(const Value: integer);

  published
    property usuario: word read Fusuario write Setusuario;
    property tipo: word read Ftipo write Settipo;
    property idCheque: integer read FidCheque write SetidCheque;
    property idMovimiento: integer read FidMovimiento write SetidMovimiento;
  public
    constructor nuevoMovimiento(AOwner: TComponent; usuario, tipoMovimiento: word; idCh, idMov: integer);
  end;

var
  frmMovCheque: TfrmMovCheque;

implementation

uses cheque, MDatos, Recursos, cartera, abm, banco;

{$R *.dfm}

{ TfrmMovCheque }

constructor TfrmMovCheque.nuevoMovimiento(AOwner: TComponent;
  usuario, tipoMovimiento: word; idCh, idMov: integer);
begin
  inherited Create(Aowner);
  self.usuario := usuario;
  self.tipo := tipoMovimiento;
  self.idCheque := idCh;
  self.idMovimiento := idMov;
  self.cdsMovCartera.Params [0].AsInteger := self.idMovimiento;
  self.cdsMovCartera.Open;
  if self.idMovimiento = 0 then
  begin
    if self.tipo = 1 then
      TfrmCheque.AltaModifCheque(self, self.usuario, 0);
    self.cdsMovCartera.Insert;
  end;
  self.cargarDatosCheque;
  self.rbInversorClick(self);
  self.grdDestOrig.UnselectAll;
  self.ShowModal;
end;

procedure TfrmMovCheque.SetidCheque(const Value: integer);
begin
  FidCheque := Value;
end;

procedure TfrmMovCheque.Settipo(const Value: word);
begin
  Ftipo := Value;
end;

procedure TfrmMovCheque.Setusuario(const Value: word);
begin
  Fusuario := Value;
end;

procedure TfrmMovCheque.cdsMovCarteraNewRecord(DataSet: TDataSet);
begin
  self.cdsMovCarteraID_MOVIMIENTO.AsInteger := id('CARTERA_GEN');
  if self.cdsMovCarteraID_MOVIMIENTO.AsInteger = 0 then
    self.cdsMovCartera.Cancel
  else
  begin
    self.cdsMovCarteraTIPO_MOVIMIENTO.AsInteger := self.tipo;
    self.cdsMovCarteraID_CHEQUE.AsInteger := self.idCheque;
  end;

end;

procedure TfrmMovCheque.rbInversorClick(Sender: TObject);
begin
  self.edtFiltro.Text := '';
  self.cdsDestinoOrigen.Close;
  self.cdsDestinoOrigen.CommandText := 'select APELLIDO ||'', ''|| NOMBRE as NOMBRE, ''1''||ID_INVERSOR as ID from INVERSOR order by NOMBRE';
  self.cdsDestinoOrigen.Open;
end;

procedure TfrmMovCheque.rbOperarioClick(Sender: TObject);
begin
  self.edtFiltro.Text := '';
  self.cdsDestinoOrigen.Close;
  self.cdsDestinoOrigen.CommandText := 'select APELLIDO ||'', ''|| NOMBRE as NOMBRE, ''2''||ID_OPERARIO as ID from OPERARIO order by NOMBRE';
  self.cdsDestinoOrigen.Open;
end;

procedure TfrmMovCheque.rbProveedorClick(Sender: TObject);
begin
  self.edtFiltro.Text := '';
  self.cdsDestinoOrigen.Close;
  self.cdsDestinoOrigen.CommandText := 'select RAZON as NOMBRE, ''3''||ID_PROVEEDOR as ID from PROVEEDOR order by NOMBRE';
  self.cdsDestinoOrigen.Open;
end;


procedure TfrmMovCheque.grdDestOrigCellClick(Column: TColumn);
begin
  self.cdsMovCarteraID_ORIGEN_DESTINO.AsInteger := self.cdsDestinoOrigenID.AsInteger;
end;

procedure TfrmMovCheque.cargarDatosCheque;
var
  ds: TSQLDataSet;
begin
  ds := TSQLDataSet.Create(self);
  try
    ds.SQLConnection := Datos.Con;
    ds.CommandText := 'SELECT fecha_emision, fecha_cobro, numero, banco||'' (SUC: ''||sucursal||'')'' as banco, importe '
    +'FROM cheque INNER JOIN banco ON (cheque.ID_BANCO = BANCO.ID_BANCO) '
    +'WHERE id_cheque = '+intToStr(self.idCheque);
    ds.Open;
    self.lblFechaEmision.Caption := ds.Fields[0].AsString;
    self.lblFechaCobro.Caption := ds.Fields[1].AsString;
    self.lblNumero.Caption := ds.Fields[2].AsString;
    self.lblBanco.Caption := ds.Fields[3].AsString;
    self.lblImporte.Caption := FloatToStrF(ds.Fields[4].AsFloat, FFCurrency, 15, 2);
  finally
    ds.Free;
  end;

end;

procedure TfrmMovCheque.edtFiltroChange(Sender: TObject);
begin
  if self.edtFiltro.Text <> '' then
  begin
    self.cdsDestinoOrigen.Filtered := False;
    self.cdsDestinoOrigen.Filter := 'NOMBRE like ''%'+self.edtFiltro.Text+'%''';
    self.cdsDestinoOrigen.Filtered := True;
  end
  else
    self.cdsDestinoOrigen.Filtered := False;
end;

procedure TfrmMovCheque.btnGrabarClick(Sender: TObject);
var
  dsAux : TSQLDataSet;
begin
  try
    self.cdsMovCartera.ApplyUpdates(0);
    dsAux := TSQLDataSet.Create(self);
    try
      dsAux.SQLConnection := Datos.Con;
      dsAux.CommandText := 'SELECT * FROM composicion_persona WHERE id_composion = '+self.cdsMovCarteraID_ORIGEN_DESTINO.AsString;
      dsAux.Open;
      if dsAux.IsEmpty then
      begin
        dsAux.Close;
        dsAux.CommandText := 'INSERT INTO composicion_persona (id_composion) VALUES ('+self.cdsMovCarteraID_ORIGEN_DESTINO.AsString+')';
        dsAux.ExecSQL();
      end;
    finally
      dsAux.Free;
    end;
    self.Close;
  except
  end;
end;

procedure TfrmMovCheque.cdsMovCarteraTIPO_MOVIMIENTOChange(Sender: TField);
begin
  if Sender.AsInteger <> 3 then
    self.edbTasa.Enabled := False
  else
    self.edbTasa.Enabled := True;
end;

procedure TfrmMovCheque.sMovCarteraStateChange(Sender: TObject);
begin
  self.btnGrabar.Enabled := self.cdsMovCartera.ChangeCount > 0;
end;

procedure TfrmMovCheque.rbBancoClick(Sender: TObject);
begin
  self.edtFiltro.Text := '';
  self.cdsDestinoOrigen.Close;
  self.cdsDestinoOrigen.CommandText := 'select BANCO ||'', SUC: ''|| SUCURSAL as NOMBRE, ''4''||ID_BANCO as ID from BANCO order by NOMBRE';
  self.cdsDestinoOrigen.Open;
end;

procedure TfrmMovCheque.SetidMovimiento(const Value: integer);
begin
  FidMovimiento := Value;
end;

procedure TfrmMovCheque.SpeedButton1Click(Sender: TObject);
begin
  if self.rbInversor.Checked then
    TfrmABM.Entrar(self, self.usuario, 7)
  else if self.rbProveedor.Checked then
    TfrmABM.Entrar(self, self.usuario, 3)
  else if self.rbBanco.Checked then
    TfrmBanco.AltaModifBanco(self, self.usuario, 0)
  else
    TfrmABM.Entrar(self, self.usuario, 8);
  self.cdsDestinoOrigen.Refresh;
end;

end.
